home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / asmutil / afloat.zip / LTOF.ASM < prev    next >
Assembly Source File  |  1988-03-14  |  2KB  |  93 lines

  1.         PAGE ,132
  2. ;----------------------------------------------------------
  3. ; LTOF -- version for use in assembly language programs
  4. ;
  5. ; Copyright Bob Kline 1988
  6. ;
  7. ; Purpose:
  8. ;       Convert four-byte long integer to floating point value
  9. ;
  10. ; Input:
  11. ;       DX:AX hold long value to be converted
  12. ;
  13. ; Output:
  14. ;       4-byte real returned in DX:AX
  15. ;
  16. ; Other registers affected:
  17. ;       CX
  18. ;
  19. ; Other procedures called:
  20. ;       none
  21. ;----------------------------------------------------------
  22.         PUBLIC  LTOF
  23.  
  24.     .MODEL    SMALL
  25.  
  26.     .CODE
  27.  
  28. LTOF    PROC
  29.  
  30. ; prepare CX for sign and check for (integer == 0)
  31.         OR      DX,DX
  32.         JNZ     SAVE_SIGN
  33.         OR      AX,AX
  34.         JNZ     SAVE_SIGN
  35.         RET
  36.  
  37. SAVE_SIGN:
  38.         XOR     CX,CX
  39.         OR      DX,DX
  40.         JNS     POSITIVE
  41.         NEG     DX
  42.         NEG     AX
  43.         SBB     DX,0
  44.         OR      CH,80h
  45. POSITIVE:
  46.         PUSH    CX
  47.  
  48. ; use CX for mantissa, starting out with 24
  49.         MOV     CX,24
  50.  
  51. ; if necessary, shift right until top 7 bits
  52. ;   are zero
  53.         JMP     SHORT TEST1
  54. LOOP1:  SHR     DX,1
  55.         RCR     AX,1
  56.         INC     CX
  57. TEST1:  TEST    DX,0FE00h
  58.         JNZ     LOOP1
  59.  
  60. ; shift left until we get a one bit in the
  61. ;   24th position from the right
  62.         JMP     SHORT TEST2
  63. LOOP2:  SHL     AX,1
  64.         RCL     DX,1
  65.         DEC     CX
  66. TEST2:  TEST    DX,100h
  67.         JZ      LOOP2
  68.  
  69. ; round and shift one to the right
  70.         ADD     AX,1
  71.         ADC     DX,0
  72.         SHR     DX,1
  73.         RCR     AX,1
  74.  
  75. ; make top bit invisible
  76.         AND     DX,7Fh
  77.  
  78. ; bias the exponent and fold it in
  79.         ADD     CX,127
  80.         XCHG    CH,CL
  81.         SHR     CX,1
  82.         OR      DX,CX
  83.  
  84. ; get the sign back off the stack & fold in,
  85. ;   and we're done
  86.     POP    CX
  87.         OR      DX,CX
  88.         RET
  89.  
  90. LTOF   ENDP
  91.  
  92.         END
  93.